package datatypes;

public class ADTFktPow extends ADTFunktion
{

	private ADTWert wert1;
	private ADTWert wert2;

	
	public ADTFktPow(ADTWert wert1, ADTWert wert2) 
	{
		this.wert1 = wert1;
		this.wert2 = wert2;
		this.variable = null;
		this.hochwert = null;
	}

//	public ADTFktPow(ADTWert wert, ADTWert hochwert) 
//	{
//		this.wert = wert;
//		this.hochwert = hochwert;
//	}
	
	public ADTFktPow(ADTWert wert1, ADTWert wert2, ADTWert variable, ADTWert hochwert) 
	{
		this.wert1 = wert1;
		this.wert2 = wert2;
		this.variable = variable;
		this.hochwert = hochwert;
	}
	
	public double getErgebnis()
	{
		if(hochwert == null && variable == null)
		{
			return Math.pow(wert1.getErgebnis(), wert2.getErgebnis());			
		}
		else if(hochwert == null)
		{
			return variable.getErgebnis() * Math.pow(wert1.getErgebnis(), wert2.getErgebnis());
		}
		else if(variable == null)
		{
			return Math.pow(Math.pow(wert1.getErgebnis(), wert2.getErgebnis()), hochwert.getErgebnis());
		}
		else
		{
			return wert.getErgebnis() * Math.pow(Math.pow(wert1.getErgebnis(), wert2.getErgebnis()), hochwert.getErgebnis());
		}
	}
	
	public ADTWert getWert() 
	{
		return wert;
	}

	public void setWert(ADTWert wert) 
	{
		this.wert = wert;
	}
}
